function getStyle(elem, attr) {
    return elem.currentStyle ? elem.currentStyle[attr] : getComputedStyle(elem)[attr];

}
/* 
*功能：运动函数
*@param:elem{object}元素
*@param:attr{string}运动的属性
*@param:step{number}运动的步长
*@param:target{number}运动的目标
*/
// var timer;
function move(elem, attr, step, target) {
    // var timer;
    //6.设置step正负
    step = parseInt(getStyle(elem, attr)) > target ? -step : step;
    //5.防止定时器叠加
    clearInterval(elem.timer);
    //1.开启定时器运动
    elem.timer = setInterval(function () {
        //3.获取运动属性值，增加
        var cur = parseInt(getStyle(elem, attr)) + step;
        //4.判断是否到达终点
        if ((cur >= target && step > 0) || (cur <= target && step < 0)) {
            cur = target;
            clearInterval(elem.timer);
        }
        //2.设置运动的值
        elem.style[attr] = cur + "px";
    }, 10)
}
/* 
*功能：获取[min，max]之间的随机整数
*@param:min{number}元素
*@param:max{number}运动的属性
*/
function getRandInt(min, max) {
    return Math.floor(Math.random() * (max - min + 1) + min);
}

/* 
*功能：给elem绑定一个etype类型的事件
*@param:elem{Element}}元素
*@param:eType{String}事件类型
*@param:fun{function}事件处理函数
*@param:flag{String}是否捕获,true:捕获阶段,false:冒泡阶段
*/
function bind(elem, eType, fun, flag) {
    if (elem.attachEvent) {
        //IE
        elem.attachEvent('on' + eType, fun);
    } else {
        elem.addEventListener(eType, fun, flag)
    }
}

/* 
*功能：给elem取消事件的绑定
*@param:elem{Element}}元素
*@param:eType{String}事件类型
*@param:fun{function}事件处理函数
*/
function unbind(elem, etype, fun) {
    if (elem.detachEvent) {
        //IE:
        elem.detachEvent("on" + etype, fun);
    } else {
        elem.removeEventListener(etype, fun);
    }
}
/* 
*功能：缓冲运动
*@param:elem{Element}}元素
*@param:attrs{Object}运动的属性
*/
function bufferMove(elem, attrs) {
    //清空定时器
    clearInterval(elem.timer);
    //遍历对象
    elem.timer = setInterval(function () {

        var tag = true;//默认多个属性都到达了终点.

        for (var attr in attrs) {
            target = attrs[attr];//取出运动的目标
            if (attr == "opacity") {
                //1.获取当前位置
                //方大100倍
                var cur = parseInt(getStyle(elem, attr) * 100);
                //对target做放大处理
                target = target <= 1 ? target * 100 : target;
            } else {
                var cur = parseInt(getStyle(elem, attr));
            }

            //2.计算速度:对速度向上取整            
            //速度会自动判断方向
            var speed = (target - cur) / 10;
            //对速度进行取整处理
            speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);

            //如果某一个属性没有到达终点值:定时器就不能关闭:tag=false;
            if (cur != target) {
                tag = false;
            }

            if (attr == "opacity") {
                elem.style[attr] = (cur + speed) / 100;//设置的时候缩小100倍
            } else {
                //设置left属性:当前位置+speed
                elem.style[attr] = cur + speed + "px";
            }
        }
        //循环之后多个属性都到达了终点:
        if (tag == true) {
            clearInterval(elem.timer);
        }
    }, 30)
}